package Class009;

//C语言中，涉及到一个问题
//当你想传递数组或者结构体时，是传递本体还是指针?
//C语言可以传递本体，也可以传递 *本体，作为指针
//Java中，直接认为都是指针
public class HeapAndStack {
    public static void main(String[] args) {
        Number number = new Number(5);
        System.out.println(number.val);
        changeNumber(number);
        System.out.println(number.val);
        changeVal(number);
        System.out.println(number.val);

        int[] arr = {1, 2, 3};
        changeArr(arr);
        System.out.println(arr[0]);
        changeArrVal(arr);
        System.out.println(arr[0]);
    }

    //修改栈里的指针和堆毫无关系
    public static void changeNumber(Number number) {
        number = null;
    }

    //通过指针改本体的值是可以的
    public static void changeVal(Number number) {
        number.val = 1;
    }

    //数组也是一样。数组本身就是个引用对象，C语言中就是个首元素地址
    public static void changeArr(int[] arr) {
        arr = null;
    }

    public static void changeArrVal(int[] arr) {
        arr[0] = 10;
    }

    public static class Number {
        int val;

        public Number(int val) {
            this.val = val;
        }
    }
}
